home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 2000 July: Mac OS SDK / Dev.CD Jul 00 SDK2.toast / Development Kits / Hardware / Mac OS USB DDK / Mac OS USB DDK 1.4.1 / Documentation / Mac OS USB Change History next >
Encoding:
Text File  |  2000-04-25  |  20.0 KB  |  319 lines  |  [TEXT/R*ch]

  1.  ***
  2.  ***    Universal Serial Bus(tm) (USB) for the Mac OS
  3.  ***    Mac OS USB 1.4.1 DDK Change History Notes
  4.  ***    Copyright 1998 Apple Computer, Inc.
  5.  ***
  6.  
  7.   *** IMPORTANT *** IMPORTANT *** IMPORTANT *** IMPORTANT ***
  8.  
  9. The USB Support and USB Device Extension files may not be distributed 
  10. in any manner.  These files are for developer use only, and are NOT
  11. TO BE INCLUDED with the components installed with your product.
  12.  
  13. This DDK requires that you have the Universal Interfaces and Libraries 3.3 installed in your development environment. You can obtain these files from the Apple Developer Connection DDK web page - 
  14.  
  15. <http://developer.apple.com/sdk/index.html>
  16.  
  17. The two common symptoms that you have not yet installed these files will be:
  18. 1. There is a compile time error that the header file "MacErrors.h" could not be found
  19. 2. There is a link error that the file HIDLib could not be found.
  20.  
  21. Both files are included with Universal Interfaces and Libraries 3.3.
  22.  
  23. Refer to the document "MacOS USB Change History -> 1.2" for the Change History of Mac OS USB to version 1.2.
  24.  
  25.  
  26.  Table of Contents:
  27. -------------------------------------------------------------
  28.  Testing USB 1.4.1 on an Power Macintosh with Built-in USB
  29.  Testing USB 1.4.1 on older Power Macintosh system without built-in USB
  30.  USB 1.4.2
  31.  Changes from USB 1.4 -> 1.4.1
  32.  Changes from USB 1.3.5 -> 1.4
  33.  Changes from USB 1.2 -> 1.3.5f8
  34.  
  35. -------------------------------------------------------------
  36.  
  37. Testing USB 1.4.1 on Power Macintosh systems with built-in USB
  38. ----------------------------------------------------------------
  39.  
  40. For Macintosh Systems with built-in USB, you should test with the Mac OS 9 Update present. Use the Software Update Control Panel built into Mac OS 9, to download the software update. Alternatively, you can test with the System Extension files supplied as part of this DDK, however, if you encounter a problem, you will need to verify whether the problem occurs with the Mac OS 9 Update, before submitting a bug report. Refer to the Installation instructions provided in the "Mac OS USB DDK Readme", to test with the Extension files.
  41.  
  42. Note that USB Audio support requires Mac OS 9.0 or greater, on a Macintosh system with built-in USB to function properly.
  43.  
  44. Please make no assumption as to the release of Mac OS USB indicating the presence of a specific version of Mac OS System Software.
  45.  
  46.  
  47. Testing USB 1.4.1 on older Power Macintosh system without built-in USB
  48. ------------------------------------------------------------------------
  49.  
  50. For Macintosh Systems which do no have built-in USB, but have an installed USB PCI or Cardbus card present, use the USB Adapter Card Support Installer for Mac OS USB 1.4.1. You can obtain a copy of this installer from the Apple Software Updates web site. Use the following URL:
  51.  
  52. <http://asu.info.apple.com/swupdates.nsf/artnum/n11543>.
  53.  
  54.  
  55. USB 1.4.2
  56. ---------
  57. USB 1.4.2 addresses only a single issue regarding the USB hubs on the Apple Studio Displays being unusable upon the system awakening from sleep. For this release, the Gestalt selector 'usbv' returns 0x01428000. Note that the version of the USB Device Extension file remains 1.4.1. USB 1.4.2 is included as part of the Mac OS 9 Update. There is no standalone installer nor separate extensions provided for testing of this release. You can only test with this release of USB by installing the Mac OS 9 Update.
  58.  
  59. Changes from USB 1.4 -> 1.4.1f4
  60. (most recent first)
  61. -------------------------------
  62.  
  63. 11. Fixed a problem with USBProber such that it was not displaying the driver version string correctly.
  64.  
  65. 10. Updated the PrintClassDriver to work with all releases of USB 1.1 and greater.  Also fixed a problem with the DrvrGlue.a.o where the older code was still being used even though the .a code had been updated. Separated the PrinterDriver from the Chooser portion of the sample.
  66.  
  67. 9. Fixed a memory corruption problem in the HID driver when it would allocate memory during interrupt time.
  68.  
  69. 8. USB now checks for the presence of the 'dbex' resource to allow disabling of file based drivers if the Shift key is held down at startup.
  70.  
  71. 7. Include the PowerClassQueryDevice sample program.
  72.  
  73. 6. Include the HID Reader utility (which based on the HID Reader sample code, but is far more extensive a program).
  74.  
  75. 5. Fixed the HID Driver to return the serial string when passed the HIDGetDeviceInfo request with the kHIDGetInfo_GetSerialNumberString selector.
  76.  
  77. 4. Implemented the following HID routines
  78. HIDGetNextButtonInfo
  79. HIDGetNextUsageValueInfo
  80. HIDGetReportLength
  81. HIDInitReport
  82.  
  83. 3. Fixed a problem in which waking up a PowerBook G3 Series system with a USB Cardbus card present would lose USB services.
  84.  
  85. 2. Fixed the "jerky cursor" problem which occurred whenever the USB mouse was used during disk activity. The problem was especially noticeable on PowerBook system whenever the internal drive had gone to sleep and was being spun ap.
  86.  
  87. 1. Implemented a fix for printer class devices where a suspend request to the interface driver resulted in suspending the entire device.
  88.  
  89.  
  90. Changes from USB 1.3.5f8 -> 1.4
  91. -------------------------------
  92. 1. Added feature for a USBShim to be registered as a shared library. USBShim must export the symbol "ShimDescription" which is a structure of type USBShimDescription where the USBShimLoadingOptions field must have the kUSBRegisterShimAsSharedLibrary bit set, and the libraryName field defines the CFM shared library name.
  93.  
  94. 2. Added support for the HIDDriver HIDGetReport and HIDSetReport API's.
  95.  
  96. 3. The OHCI UIM has been modified so that the root hub simulation is interrupt based instead of polled. Other changes were made to the USB keyboard and pointing devices to work with Macsbug.
  97.  
  98. 4. Fixed a buffer overrun situation with the USB Audio class driver which resulted in the corruption of the heap. The common symptom was that USB microphones would work for a period of time, but then input would stop.
  99.  
  100. 5. Implemented several fixes in the USB Audio class for compatibility with audio input and output devices.
  101.  
  102. 6. Fixed an error-recovery problem in the Printer class driver.
  103.  
  104. 7. Modified USB Family Expert to report better error messages when a driver fragment fails to load.
  105.  
  106. 8. Modified the HID class driver for compatibility with USB 1.1.
  107.  
  108. 8. Added support to the HID class driver for some digitizer tablets.
  109.  
  110. 9. Exported the USBAddShimFromDisk function from the USB Family Expert so that this call now works properly.
  111.  
  112. 10. USB Shims and Drivers can now be in either 'usbd' or 'usbs' files.
  113.  
  114. 11. Added API call USBSetPipePolicy to allow changing pipe characteristics. This call will be better documented in a future version of this readme. Some things that can be controlled -
  115.  
  116.     Max number of bytes per frame. Allows Isoc devices to use less than bandwidth specified in the endpoint.
  117.  
  118.     Max data  per IRP. Basically the max that usbReqCount can be. This is currently not implemented.
  119.  
  120.     Max service interval. For Interrupt endpoints, this is the polling interval. 
  121.  
  122.     
  123. 12. Added API call to obtain the USB String Descriptor
  124.   
  125.                 OSStatus USBGetStringDescriptor(USBPB *pb)
  126.  
  127.      --> usbReference       Device/Interface
  128.      --> usb.cntl.WValue    String number
  129.      --> usb.cntl.WIndex    Language code, 0 for English
  130.      --> usbBuffer          Where to put descriptor
  131.      --> usbReqCount        Size of buffer
  132.     <--  usbActCount        Size of returned string
  133.  
  134.  
  135. 13. Fixed problem with suspend and  resume so that transactions are processed correctly.
  136.  
  137. 14. Removed support in the Audio class driver for 4.000 kHz and 8.000 kHz sampling rates.
  138.  
  139. 15. Moved USB.h to the Interfaces folder. Added HID.h to the Interfaces folder.
  140.  
  141. 16. Added API call to obtain the bandwidth available to an isochronous device. 
  142.      OSStatus USBGetBandwidthAvailableByReference 
  143.  
  144.      -->     usbReference      device/interface/pipe on bus
  145.      <--     avail             currently available bandwidth
  146.  
  147. 17. Added the kUSBDebugAwareFlag to USB.h.  This is used by drivers that want a transfer to complete while Macsbug is active.  Typically this will just be keyboard/mouse drivers. The use of this flag will be documented later. In order for Macsbug to work properly with modules which implement this flag, the next version of the MacOS ROM file is required.
  148.  
  149. 18. Fixed a problem with the Audio class driver such that the mouse was jerky with audio active.
  150.  
  151. 19. Fixed a problem with the USB CardBus Enabler so that the UIM is unloaded before the card is ejected.
  152.  
  153. 20. The HID class driver checks for USB versions earlier than 1.1 and refuses to load.  
  154.  
  155. 21. Addessed a crash problem with hot-plugging devices to a CMD 670/673 USB PCI card.
  156.  
  157. 22. Added API call, USBPortStatus
  158.  
  159.     OSStatus USBPortStatus(USBPB *pb)
  160.  
  161.      --> usbReference       Device/Interface
  162.     <--  usbStatus          result of query.
  163.  
  164. The result of the query is most likely to be:
  165.  
  166.    noErr                   nothing is wrong, transient error
  167.    kUSBDeviceDisconnected  the device is no longer connected
  168.    kUSBPortDisabled        port device is disabled. A reset is needed.
  169.  
  170. The USBPortStatus call is designed to be used when a driver gets a kUSBNotResponding error, to find out why this error occurred. This will distinguish between a transient error, that where the device is disconnected, and the condition where the driver's port has been disabled because of a babble condition (can be caused by ESD).
  171.  
  172. In response, if the device is disconnected the the Apple class drivers have been modified to stop communications with the device and prepare to be cleaned up. If the port is disabled, the class drivers will reset the device and go back into their configuration routines.
  173.  
  174. 23. Included the USB Software Locator technote, along with various tools for creating an Installer script and for testing the software update from the USB staging server.
  175.  
  176. 24. Added Expert Options Control Panel to allow control of a. the default Expert Status level, b. the size of the Expert Status message buffer, and c. and to force USB to assign fixed addresses to devices. This latter option means that if the USB topology remains unchanged across reboots, then each device will be assigned the same USB address.
  177.  
  178. 25. Added Power Class driver to the USB Device Support driver file. Along with this support are the addition of the following API's in the PowerClass.h file
  179.  
  180. OSStatus GetNextPowerDevice (PowerDeviceDescriptor *device);
  181. OSStatus USBPowerGetUsageData (USBReference reference, UInt32 inCollection, 
  182.                     HIDUsage inUsagePage, HIDUsage inUsage, SInt32 *value);
  183. OSStatus USBPowerSetUsageData (USBReference reference, UInt32 inCollection,        
  184.                     HIDUsage inUsagePage, HIDUsage inUsage, SInt32 value);
  185.  
  186. These calls will be documented in an upcoming version of this readme. Use of these calls requires linking with the USBPowerClassLib stub library.
  187.  
  188. 26. Modifed reporting of overcurrent cases to eliminate false overcurrent indications for USB Hubs.
  189.  
  190. 27. Implement fix to USB Software Locator to provide region information to the server. A fix to the server is still required for the correct support of localized software via USB Software Locator. At present, only International English packages are offered to users regardless of the localized system software they are using.
  191.  
  192. 28. Removed the Apple specific mouse driver as the generic mouse class driver correctly handles support of this device.
  193.  
  194. 29. Added the USBPowerGetCapacityLimits and the USBPowerGetCapacityLimits calls to get/modify the control limits which are passed to the Power Manager which govern when the low power alert is raised for a USB Power Class device.
  195.  
  196. 30. The USL Services Library now exports the USBSetPipePolicy call.
  197.  
  198. 31. Improved interaction with USB Cardbus card when the card is ejected with USB devices attached, then reattached. Previously, if a USB device was connected to the USB Cardbus card and the card ejected, then re-inserted, the devices would stop functioning.
  199.  
  200. 32. Fixed problem with Keyboard class driver such that when awakening from sleep, the system would hang when multiple attempts were made to set the LED's.
  201.  
  202. 33. Fixed a longstanding name registry name corruption problem which occurred with the Lexmark Z51 printers only.
  203.  
  204. 34. Modified the USBAddDriverFromFSSpec call so that an error is returned if the previous driver could not be unloaded immediately. This can happen if the current module does not allow the finalize routine to be called immediately. In such case, the kUSBDeviceBusy error is returned. If this happens, then it is the responsiblity of the caller to give the system some task time so that the module can complete any necessary processing at task time an allow the finalize routine to be called. The psuedo code for making the USBAddDriverForFSSpec call is as follows.
  205.  
  206.   err = USBAddDriverForFSSpec();
  207.   while (err == kUSBDeviceBusy)
  208.   {
  209.     give system some idle time (WaitNextEvent())
  210.     err = USBAddDriverForFSSpec();
  211.     if we've looped "long enough", bail out
  212.   }
  213.  
  214. 35. Fixed a crash when using USB microphones with ViaVoice, by setting the default sample rate for input devices.
  215.  
  216. 36. Fixed a problem whereby a USB mouse quits working after an ADBReInit call on machines without the ADBShim present. The ADBShim is present on all Macintosh system that have USB built-in.
  217.  
  218. 37. Fixed USBResetDevice so that it no longer corrupts memory past the parameter block. For USB 1.3 and earlier, the call to USBResetDevice would overwrite memory up to 96 bytes past the end of the parameter block. For USB 1.3.x and earlier, one workaround is to append a pad of 96 bytes to a USBPB structure which you pass to USBResetDevice.
  219.  
  220. 38. Modified USBProber so that the bus probe window is not updated on every notification.
  221.  
  222. 39. Fixed a problem with the Modem Class Driver which closed the connection to the SerialShimLib if the system was put to sleep, even if the application using the USB Modem, had not closed the connection.
  223.  
  224. 40. Modified the USBKeyypad example code to support the ForceQuit key sequence on cpu's without the ADBShim present.
  225.  
  226. 41. Updated the USB API Reference to v26 which includes a description of the new calls and API's.
  227.  
  228. 42. USB Sudio support now provided for 16 bit mono USB Audio input devices.  Requires the Mac OS 9.0 Software Update.
  229.  
  230.  
  231.  
  232. Changes from USB 1.2 -> 1.3.5f8
  233. -------------------------------
  234.  
  235. 1. Added support for driver requested timeouts.
  236.  
  237. 2. Implemented support in the HID driver to support vendor-specific drivers for Immersion-based force feedback joysticks.
  238.  
  239. 3. Implemented support for the USB Expert to get the international strings from a USB device.
  240.  
  241. 4. Provide USB suspend and resume wakeup support.
  242.  
  243. 5. Fixed bug where device names were not showing up when the "not enough power" dialog was displayed. 
  244.  
  245. 6. USBExpertStatus calls are now re-entrant.  This should solve some "missing messages" reported by some driver writers.
  246.  
  247. 7. Modified USBProber to size the vertical scrollbars correctly. Fixed "flashing" problem when the expert log would overflow.
  248.  
  249. 8. Added new functions allowing USB Class Drivers to get and set the Expert Status level.  This will allow developers to debug specific problems they are experiencing and not overflow the log.  This functionality is currently only used by USB Prober.
  250.  
  251. 9. Added support for kNotifySystemSleepRevoke message. 
  252.  
  253. 10. Improved the performance of isochronous and interrupt transfer routines under Virtual Memory.
  254.  
  255. 11. CHANGE FOR 1.3a4 from previous builds - Added support for 5-second timeout functionality for Control Endpoint only.  If a device fails to transfer data for 5 seconds on the Control Endpoint (ie, NAKs continiously), then the transfer will be returned. We still permit the kUSBNo5SecTimeout flag for bulk transactions -- but we intend disallow this in a future build. -- PLEASE UPDATE YOUR DRIVERS IF YOU HAVE BEGUN TO USE THIS FLAG!
  256.  
  257. 12. Fixed a problem that could permit dereferencing nil if we ran out of isoch descriptors.
  258.  
  259. 13. Implemented the USBGetVersion call to obtain the version of USB present. This call is provided as an alternative for using Gestalt so that one did not need to link with InterfaceLib in order to obtain the version of USB present. The following is a sample call to demonstrate how to do this. For this example, you weak link the USBServicesLib as part of the project. The result of the call is a 4 byte 'vers' response exactly like what would be returned by using the Gestalt call with the 'usbv' selector.
  260.  
  261. #include <USB.h>  // ensure that you include the USB.h 1.3 header file
  262.  
  263. UInt32 MyUSBGetVersion(void)
  264. {
  265.     UInt32    version;
  266.     
  267.        if ((Ptr) USBGetVersion != (Ptr) kUnresolvedCFragSymbolAddress)
  268.               version = USBGetVersion();
  269.        else
  270.               version = 0;    // version of USB is less than 1.3
  271.        return version;
  272. }
  273.  
  274. 14. USBExpertStatus and USBExpertStatusLevel are now more efficient, if the message does not appear in the USB Prober log. USB Prober now checks the level parameter before processing the message.  Before, USB Prober checked the level just before inserting the message in the log.
  275.  
  276. 15. Fixed the Isochronous frStatus error codes.  In USB 1.2 (and earlier) the wrong error codes were returned. For example a DataOverRun error would appear as a Stall error, and DeviceNotResponding was reported as a BitStuff error.
  277.  
  278. 16. Fixed a problem with the OHCIUIM in which multiple overcurrent dialogs appeared when the root hub detected an overcurrent situation.
  279.  
  280. 17. Made sure that the kNotifySystemSleepDemand messages are sent the the driver modules.
  281.  
  282. 18. Fixed the Mouse driver to function better on USB CardBus-equipped PowerBooks.
  283.  
  284. 19. For USB.h 1.3b3, updated the USB.h header with the correct defines for selecting timeouts when no-data is being transferred.
  285.  
  286. 20. Added support for specifying timeouts when no-data is being transferred.
  287.  
  288. 21. Updated the USB_API_Ref from v23 to v24v4.
  289.  
  290. 22. API Addition - added the USBAddDriverForFSSpec function call. Refer to the v24v4 USB_API_Ref for a description of this call.
  291.  
  292. 23. Fix out-of-order transactions that could occur on immediate errors from the UIM. 
  293.  
  294. 24. Implemented a fix to the StorageClass sample driver to address a problem when trying to write greater than 2MB to the disk.
  295.  
  296. 25. Implemented a fix for a re-entrancy problem which occurred with some audio devices when doing a rapid hot-plug/unplug test.
  297.  
  298. 26. Improved error handling in the printer driver.
  299.  
  300. 27. Fixed problem wuch that drivers were reporting a status of USBPending.
  301.  
  302. 28. Added the following class drivers to the USB Device Extension file
  303.   USBHIDDriver - support for HID class devices, subclass 0
  304.   USBHIDDriver1 - support for HID class devices, subclass 1
  305.   USBCommClassDriver - supports USB Comm Class devices, subclass "Abstract Control Model", protocol V.25.
  306.   USBAudioClassDriver - requires SSW 9.0
  307.   USBAudioStreamDriver - requires SSW 9.0
  308.   USBPrintingSupport
  309.   plus a number vendor specific modules for force feedback game devices.
  310.  
  311. 29. Updated the USBManagerLib to include the USBAddShimFromDisk call.
  312.  
  313. 30. Included the USB Software Locator Extension as part of the DDK.  This extension is required for Mac OS 9.0 on PCI Power Macintosh Systems which do not have USB built-in. This extension works with the Software Locator to download USB drivers from the internet, to support USB devices for which no matching driver is found. The USB Software Locator extension does nothing if installed over MAc OS 8.6. A Tech Note will be released which discusses how developers can provide support for the USB Software Locator mechanism.
  314.  
  315. Known Issues with USB 1.3.5
  316. ---------------------------
  317. 1. The iBook, iMac DV, and the Power Macintosh G4 systems with AGP support USB Mass Storage devices at startup. If  media is present when the system is started, the driver will not be reloaded with a newer Mass Storage driver, if present. On the other hand, if the media (like a Zip disk) is inserted after the system has booted, then the newer driver will be used.
  318.  
  319. If there is a need to force the vendor specific storage class driver to be used, one can make the USBAddDriverForFSSpec call. One important note on the use of this call, you must pass in the USBReference num for the USBDeviceReference, and the FSSpec must be for a correcsponding device class driver. For the storage class case, set the USBReference number to the composite class driver which has loaded the storage class interface. The FSSpec record must point to USB Device Support file which contains the composite class driver.